BaseProtocolServer
Basisklasse für Protokollserver (FIX, SBE usw.): Enthält gemeinsam genutzte Infrastruktur: Lebenszyklus, Sitzungen, Abonnements, Nachrichtenkanäle, Hintergrundaufgaben.
Erbt von: BaseLogReceiver
Implementiert: IProtocolServer, ILogReceiver, ILogSource, IDisposable
Konstruktoren
protected BaseProtocolServer(TSettings settings)
baseProtocolServer = BaseProtocolServer(settings)
Initialisiert eine neue Instanz.
- settings
- Servereinstellungen.
Eigenschaften
protected LoginRateLimiter LoginRateLimiter { get; private set; }
value = baseProtocolServer.LoginRateLimiter
baseProtocolServer.LoginRateLimiter = value
Rate Limiter für Anmeldeversuche (über alle Zuhörer geteilt).
public IEnumerable<IMessageListenerSession> Sessions { get; }
value = baseProtocolServer.Sessions
Aktive Sitzungen.
public ChannelStates State { get; protected set; }
value = baseProtocolServer.State
baseProtocolServer.State = value
Bekommt den zugrunde liegenden Zustandsspeicher.
Methoden
public void AddSubscription(ServerSubscription subscription)
baseProtocolServer.AddSubscription(subscription)
Abonnement hinzufügen.
- subscription
- Zeichnung.
protected virtual void ClearState()
baseProtocolServer.ClearState()
Löschen Sie alle Zustände: Zuhörer, Sitzungen, Abonnements.
protected string Convert(string value)
result = baseProtocolServer.Convert(value)
Konvertieren Sie Text in Latein, wenn konfiguriert.
protected abstract TSubscription CreateSubscription(TClientSession session, string requestId, ServerSubscription subscription, MessageTypes type)
result = baseProtocolServer.CreateSubscription(session, requestId, subscription, type)
Erstellen Sie eine Abonnement-Info-Instanz.
public void Disconnect(IMessageListenerSession session)
baseProtocolServer.Disconnect(session)
Sitzung trennen.
- session
- Sitzung.
protected override void DisposeManaged()
baseProtocolServer.DisposeManaged()
Ressourcen freigeben.
protected void EnqueueMessage(TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, requestId, handler, cancellationToken)
Warteschlange für eine Sitzung mit Request-ID.
protected void EnqueueMessage(TSubscription subscription, TClientSession session, string requestId, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, session, requestId, handler, cancellationToken)
Core Enqueue: Planen Sie die Arbeit an einer Client-Sitzung.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Warteschlange für mehrere Abonnenten.
protected void EnqueueMessage(TSubscription[] subscribers, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscribers, handler, cancellationToken)
Warteschlange für mehrere Abonnenten (mit Bool-Ergebnis).
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Warteschlange für ein einzelnes Abonnement.
protected void EnqueueMessage(TSubscription subscription, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask<bool>> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(subscription, handler, cancellationToken)
Warteschlange für ein einzelnes Abonnement (mit Bool-Ergebnis).
protected void EnqueueMessage(TClientSession session, Func<TSubscription, TClientSession, string, CancellationToken, ValueTask> handler, CancellationToken cancellationToken)
baseProtocolServer.EnqueueMessage(session, handler, cancellationToken)
Warteschlange für eine Sitzung (keine Anfrage-ID).
protected abstract string GetSessionKey(TClientSession session)
result = baseProtocolServer.GetSessionKey(session)
Holen Sie sich den Schlüssel, der verwendet wird, um Client-Sitzungen zu gruppieren (e.g. SenderCompId).
public IEnumerable<ServerSubscription> GetSubscriptions(IMessageListenerSession session)
result = baseProtocolServer.GetSubscriptions(session)
Erhalten Sie ein Abonnement für die angegebene Sitzung.
- session
- Sitzung.
Rückgabe: Abonnements.
public bool HasSubscriptions(DataType dataType, SecurityId securityId)
result = baseProtocolServer.HasSubscriptions(dataType, securityId)
Are there subscribers.
protected abstract bool IsStubSubscription(TSubscription subscription)
result = baseProtocolServer.IsStubSubscription(subscription)
Überprüfen Sie, ob es sich bei dem Abonnement um einen Stub (Platzhalter) handelt.
public override void Load(SettingsStorage storage)
baseProtocolServer.Load(storage)
Lasteinstellungen.
- storage
- Einstellungen Lagerung.
protected abstract void OnClearListenerState()
baseProtocolServer.OnClearListenerState()
Klarer protokollspezifischer Listener-Zustand (Stop Listener, etc.).
protected abstract void OnStartListeners(CancellationToken cancellationToken)
baseProtocolServer.OnStartListeners(cancellationToken)
Starten Sie protokollspezifische Listener (TCP, etc.). Fügen Sie Aufgaben zu _backgroundTasks hinzu.
protected abstract void ProcessInMessage(Message message, CancellationToken cancellationToken)
baseProtocolServer.ProcessInMessage(message, cancellationToken)
Verarbeiten Sie eine eingehende Nachricht und Route zu abonnierten Clients.
protected virtual void ProcessLogout(TClientSession session)
baseProtocolServer.ProcessLogout(session)
Client-Logout/Disconnect bearbeiten.
protected void RaiseNewOutMessage(IMessageListenerSession session, Message message)
baseProtocolServer.RaiseNewOutMessage(session, message)
Schreiben Sie ausgehende Nachricht an den Kanal.
protected void RaiseSessionConnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionConnected(session)
Raise Session Connected Event.
protected void RaiseSessionDisconnected(IMessageListenerSession session)
baseProtocolServer.RaiseSessionDisconnected(session)
Raise Session Disconnected Event.
public bool RemoveSubscription(ServerSubscription subscription)
result = baseProtocolServer.RemoveSubscription(subscription)
Abo entfernen.
- subscription
- Zeichnung.
Rückgabe: wenn das Abonnement gefunden wurde, andernfalls.
public bool Resume(ServerSubscription subscription)
result = baseProtocolServer.Resume(subscription)
Abonnement fortsetzen.
- subscription
- Zeichnung.
Rückgabe: wenn das Abonnement gefunden wurde, andernfalls.
public void Resume(IMessageListenerSession session)
baseProtocolServer.Resume(session)
Sitzung fortsetzen.
- session
- Sitzung.
public IAsyncEnumerable<ValueTuple<IMessageListenerSession, Message>> RunAsync(CancellationToken cancellationToken)
result = baseProtocolServer.RunAsync(cancellationToken)
Führen Sie die Verarbeitung von async-Nachrichten aus und geben Sie ausgehende Nachrichten als IAsyncEnumerable zurück. Öffnet den Server am Anfang und schließt am Ende.
public override void Save(SettingsStorage storage)
baseProtocolServer.Save(storage)
Einstellungen speichern.
- storage
- Einstellungen Lagerung.
protected abstract void ScheduleSessionWork(TClientSession session, ServerSubscription subscription, string requestId, Func<TClientSession, string, CancellationToken, ValueTask<bool>> handler)
baseProtocolServer.ScheduleSessionWork(session, subscription, requestId, handler)
Planen Sie die Arbeit an der ausgehenden Warteschlange einer Clientsitzung.
public virtual bool SendInMessage(Message message)
result = baseProtocolServer.SendInMessage(message)
Senden Sie eine eingehende Nachricht an den Server zur Verarbeitung und Weiterleitung an die Clients.
protected void StartServer(CancellationToken cancellationToken)
baseProtocolServer.StartServer(cancellationToken)
Starten Sie den Server: Initialisieren Sie den Status, starten Sie die Listener und Hintergrundaufgaben.
protected void StopServer()
baseProtocolServer.StopServer()
Stoppen Sie den Server: Aufgaben abbrechen, Kanäle komplettieren, Zustand freigeben.
public void Suspend(IMessageListenerSession session)
baseProtocolServer.Suspend(session)
Sitzung unterbrechen.
- session
- Sitzung.
public bool Suspend(ServerSubscription subscription)
result = baseProtocolServer.Suspend(subscription)
Subscription aussetzen.
- subscription
- Zeichnung.
Rückgabe: wenn das Abonnement gefunden wurde, andernfalls.
Ereignisse
public event Action<IMessageListenerSession> SessionConnected
baseProtocolServer.SessionConnected += handler
Session Connected Event.
public event Action<IMessageListenerSession> SessionDisconnected
baseProtocolServer.SessionDisconnected += handler
Session Disconnected Event.
public event Action StateChanged
baseProtocolServer.StateChanged += handler
Ereignis der Zustandsänderung.
public event Action<ServerSubscription> SubscriptionChanged
baseProtocolServer.SubscriptionChanged += handler
Client-Abonnement änderte Ereignis.
Felder
protected readonly List<Task> _backgroundTasks
value = baseProtocolServer._backgroundTasks
Hintergrundaufgaben (Clients akzeptieren, Nachrichten verarbeiten usw.).
protected readonly SynchronizedSet<long> _cancellationRequests
value = baseProtocolServer._cancellationRequests
Transaktions-IDs für ausstehende Auftragsstornierungsanfragen.
protected readonly SynchronizedSet<ServerSubscription> _changedSubscriptions
value = baseProtocolServer._changedSubscriptions
Geänderte Abonnements bis zur Benachrichtigung.
protected readonly CachedSynchronizedDictionary<string, CachedSynchronizedList<TClientSession>> _clientSessions
value = baseProtocolServer._clientSessions
Client-Sitzungen nach Sitzungsschlüssel gruppiert (e.g. SenderCompId).
protected readonly Channel<Message> _incomingMessages
value = baseProtocolServer._incomingMessages
Kanal für eingehende Nachrichten.
protected readonly Channel<ValueTuple<IMessageListenerSession, Message>> _outgoingMessages
value = baseProtocolServer._outgoingMessages
Kanal für ausgehende Nachrichten (Sitzung + Nachrichtenpaare).
protected readonly SubscriptionHolder<TSubscription, TClientSession> _subscriptions
value = baseProtocolServer._subscriptions
Zeichnungsinhaber.